//1.只能在堆上生成对象的类
#include <iostream>
class HeapOnly{
    public:
    static HeapOnly* create(){
        return new HeapOnly(); // 在堆上创建对象
    }
    void destroy(){
        delete this;
    }
    HeapOnly(const HeapOnly&)=delete; // 禁止拷贝构造
    HeapOnly& operator=(const HeapOnly&)=delete; // 禁止赋值操作
    private:
    HeapOnly()=default; // 私有构造函数，禁止在栈上创建对象
    ~HeapOnly()=default; // 私有析构函数，禁止在栈上销毁对象

};
// 2.只能在栈上生成对象的类
class StackOnly{
    public:
    StackOnly()=default;
    ~StackOnly()=default;
    void* operator new(size_t size)=delete; // 禁止在堆上创建对象
    void* operator new[](size_t size)=delete; // 禁止在堆上创建数组对象
    void* operator new(size_t size,void* p)=delete; // 禁止在堆上创建对象
};

int main(){
    HeapOnly* obj = HeapOnly::create(); // 在堆上创建对象
    // 使用obj进行操作
    obj->destroy(); // 销毁对象

    StackOnly obj2; // 在栈上创建对象

    return 0;
}